import { defineStore } from 'pinia'
import { ref } from 'vue'

export const useToken = defineStore('token', () => {
  const token = ref(null)

  const updateToken = (val) => {
    token.value = val
  }

  const removeToken = () => {
    token.value = null
  }

  return { token, updateToken, removeToken }
}, {
  persist: {
    enabled: true,
    strategies: [{
      key: 'token',
      storage: localStorage,
      beforeRestore: (context) => {
        // 在恢复之前检查并清理无效数据
        if (context.storage.getItem(context.key)) {
          try {
            JSON.parse(context.storage.getItem(context.key))
          } catch (error) {
            context.storage.removeItem(context.key)
          }
        }
      },
      serializer: {
        serialize: (state) => {
          // 只存储 token 值，而不是整个 state
          return JSON.stringify(state.token)
        },
        deserialize: (value) => {
          // 解析值并返回一个对象
          const token = JSON.parse(value)
          return { token }
        }
      }
    }]
  }
})

export default useToken